﻿#pragma once
#ifndef ARD_CPU_H
#define ARD_CPU_H

#include <Common.h>

#define READOPPER		1024  //每次预读取指令长度

enum class CPUArch;
class CmdDecoder;

//计算机的基本硬件系统由运算器、控制器、存储器、输入设备、输出设备5大部件组成。
//CPU主要负责获取程序指令、对指令进行译码并加以执行
//CPU主要由运算器、控制器、寄存器和内部总线等部件组成
//运算器包括算术逻辑单元（ALU）、累加器、缓冲寄存器、状态条件寄存器等
//控制器主要包括指令控制逻辑、时序控制逻辑、总线控制逻辑、中断控制逻辑
class CPU
{
public:
	//配置
	void init(CPUArch _arch);
	//指令循环指令器
	int exec();
	//中断判断
	void interruptHandle();
	~CPU();
private:
	void _arm64Init();
	//代码缓存
	std::unordered_map<uint64_t, uint32_t> _code;
	FILE* _firmware = nullptr;
};

#endif // !ARD_CPU_H



